<template>
  <div>
    <h1>闭包</h1>
  </div>
</template>

<script setup lang="ts">
//闭包形式 统计函数调用的次数 （在外部无法修改内部属性）
function count(): () => void {
  let i: number = 0;
  function fun(): void {
    i++;
    console.log(`该方法被调用了${i}次`);
  }
  return fun;
}

const fun: () => void = count();
fun(); //该方法被调用了1次
fun(); //该方法被调用了2次

if (1) {
  var ss = 999;
}
console.log(ss); //等于999
//var ss = 10  //变量提升  var没有块作用域 只有函数作用域和全局作用域

function getSum() {
  console.log(arguments, "arguments"); //打印结果：[1,2,3]
  let sum = 0;
  if (arguments.length) {
    for (let i = 0; i < arguments.length; i++) {
      sum += arguments[i];
    }
  }
  console.log(sum); //打印结果：6
}

getSum(1, 2, 3);

function getSumTwo(a, ...arr) {
  console.log(arr, "arr"); //打印结果：[2,3,9]
  let sum = a;
  arr.forEach((e) => {
    sum += e;
  });
  console.log(sum); //打印结果：15
}

getSumTwo(1, 2, 3, 9);

//展开运算符
let tempArr = [1, 2, 3, 4, 5, 6, 7];
console.log("tempArr=", ...tempArr); //打印结果:1,2,3,4,5,6,7
console.log("最大值", Math.max(...tempArr)); //打印结果:7
console.log("最小值", Math.max(...tempArr)); //打印结果:1

//合并数组
let tempArr2 = [8, 9];
console.log([...tempArr, ...tempArr2]); //打印结果:[1,2,3,4,5,6,7,8,9]

//**箭头函数*/
//1、基本语法
const fn = () => {};

//2、只有一个形参可以省略小括号
const fn2 = (x) => {
  console.log(x); //打印结果：1
};
fn2(1);

//3、只有一行代码可以省略大括号
const fn3 = (x) => console.log(x); //打印结果：2
fn3(2);

//4、只有一行代码可以省略return
const fn4 = (x) => x + x;
console.log(fn4(1)); //打印结果：2

//5、箭头函数可以直接返回一个对象
const fn5 = (uname) => ({ name: uname });
console.log(fn5("张三")); //打印结果：{name:张三}

/**数组解构和对象解构*/
const pc = ["海尔", "联想", "小米", "方正"];
const [hr, lx, mi, fz] = pc;
console.log(fz);

function getValue() {
  let arr = [100, 60];
  let [min, max] = arr;
  [min, max] = [max, min];
  console.log("max", max);
  console.log("min", min);
}
getValue();

/**对象的解构*/
let obj = {
  name: "张三",
  age: "18",
};
let { name, age:isAge } = obj;
console.log(name)
function getName({name}){
  console.log(`名字为${name}`)
}
getName(obj);
</script> 